package bean;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author SHAI
 */
public class gestionArticulos {

    public gestionArticulos() {
    }

    /**
     * devuelve una lista de articulos con ese nombre o similiar
     */
    public ArrayList<Articulo> getArticulos(String titulo) {
        BDConexion bd = new BDConexion();
        Connection conn = null;
        ArrayList<Articulo> lista = new ArrayList();
        if (bd.establecerConexion()) {
            conn = bd.getConexion();
        }
        try {
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("select * from ARTICULO where titulo like '" + titulo + "%'");
            while (rs.next()) {
                lista.add(getInfo(new Articulo(rs.getInt(1), rs.getString(2))));
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return lista;
    }

    /**
     * devuelve el articulo segun sea el id
     */
    public Articulo getArticulo(int id) {
        BDConexion bd = new BDConexion();
        Connection conn = null;
        ArrayList<Articulo> lista = new ArrayList();
        if (bd.establecerConexion()) {
            conn = bd.getConexion();
        }
        Articulo nuevo = new Articulo(id,"");
        try {
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("select Titulo from ARTICULO where idArticulo ="+id);
            if(rs.next()){
                nuevo.setTitulo(rs.getString(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        nuevo = getInfo(nuevo);
        return nuevo;
    }

    /**
     * devuelve la ultima revision, el contenido, fecha, punteo, noRevision
     */
    private Articulo getInfo(Articulo actual) {
        BDConexion bd = new BDConexion();
        Connection conn = null;
        if (bd.establecerConexion()) {
            conn = bd.getConexion();
        }
        try {
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("select * from PUBLICACION where idArticulo = " + actual.getId() + " order by NroRevision DESC LIMIT 1");
            if (rs.next()) {
                actual.setRevision(rs.getInt(2));
                int idUsuario = rs.getInt(3);
                actual.setContenido(rs.getString(4));
                actual.setFecha(rs.getString(5));
                rs = st.executeQuery("select nombre from USUARIO where idUsuario = " + idUsuario + "");
                if (rs.next()) {
                    actual.setAutor(rs.getString(1));
                    rs = st.executeQuery("SELECT SUM(VALOR)/COUNT(*) FROM Proyecto.VOTO WHERE idArticulo =" + actual.getId());
                    if (rs.next()) {
                        actual.setPunteo(rs.getInt(1));
                        rs = st.executeQuery("SELECT COUNT(*) FROM Proyecto.VOTO WHERE idArticulo =" + actual.getId());
                        if (rs.next()) {
                            actual.setCantidadVotos(rs.getInt(1));
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return actual;
    }

    public String setArticulo(int idUsuario, String titulo, String contenido) {
        try {
            BDConexion bd = new BDConexion();
            Connection conn = null;
            if (!bd.establecerConexion()) {
                return "Error en la Conexion.";
            }
            conn = bd.getConexion();
            conn.createStatement().executeUpdate("insert into ARTICULO select max(idArticulo)+1,'" + titulo + "' from ARTICULO;");
            conn.createStatement().executeUpdate("insert into PUBLICACION select max(a.idArticulo),max(nroRevision)+1," + idUsuario + ",'" + contenido + "',now() from PUBLICACION, ARTICULO as a where idArticulo=max(a.idArticulo)");
            return "se creo de forma Exitosa.";
        } catch (Exception e) {
            return "No se puedo guardar el Articulo.";
        }
    }

    public String setRevision(int idArticulo, int idUsuario, String contenido) {
        try {
            BDConexion bd = new BDConexion();
            Connection conn = null;
            if (!bd.establecerConexion()) {
                return "Error en la Conexion.";
            }
            conn = bd.getConexion();
            conn.createStatement().executeUpdate("insert into PUBLICACION select " + idArticulo + ",max(nroRevision)+1," + idUsuario + ",'" + contenido + "',now() from PUBLICACION where idArticulo="+idArticulo);
            return "Se aplicaron los cambios.";
        } catch (Exception e) {
            return "No se puedo guardar la Revision.";
        }

    }

    public String setVoto(int idArticulo, int idUsuario, int voto) {
        try {
            BDConexion bd = new BDConexion();
            Connection conn = null;
            if (!bd.establecerConexion()) {
                return "Error en la Conexion.";
            }
            conn = bd.getConexion();
            conn.createStatement().executeUpdate("INSERT INTO VOTO select now()," + voto + "," + idUsuario + "," + idArticulo);
            return "Se aplicaron los cambios.";
        } catch (Exception e) {
            return "No se pudo agregar el voto.";
        }
    }

    public String setDenuncia(int idArticulo, int idRevision, int idUsuario) {
        try {
            BDConexion bd = new BDConexion();
            Connection conn = null;
            if (!bd.establecerConexion()) {
                return "Error en la Conexion.";
            }
            conn = bd.getConexion();
            conn.createStatement().executeUpdate("INSERT INTO VOTO select now(),-3," + idUsuario + "," + idArticulo);
            //conn.createStatement().executeUpdate("INSERT INTO DENUNCIA select max(idDenuncia)+1," + idUsuario + ",1," + idArticulo + "," + idRevision + " FROM DENUNCIA");
            return "Se aplicaron los cambios.";
        } catch (Exception e) {
            return "No se pudo hacer la denuncia";
        }
    }
}
